package com.itheima.d1_exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 目标：认识异常。
 *      1 什么是异常
 *          异常就是代表程序出现了问题
 *      2 异常的体系
 *        Throwable
 *          Error
 *          Exception
 *              RuntimeException及其子类
 *              非RuntimeException及其子类
 *      3 Exception：叫异常，它代表的才是我们程序可能出现的问题，所以，我们程序员通常会用Exception以及它的孩子来封装程序出现的问题。
 *          运行时异常：RuntimeException及其子类，编译阶段不会出现错误提醒，运行时出现的异常（如：数组索引越界异常）
 *          编译时异常：编译阶段就会出现错误提醒的。（如：日期解析异常）
 *
 *      需求 :
 *          1 演示运行时期异常
 *          2 演示编译时期异常
 *          3 处理的方案
 */
public class ExceptionTest1 {
    public static void main(String[] args) throws ParseException {//遇到异常时抛出去，给调用者处理
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse("2022-09-09 08:10:10");//此处存在：编译时异常（要求必须在程序中书写异常处理的代码）

        int[] arr={10,20,30};
        try { //遇到异常时自己处理
            System.out.println(arr[5]);//此时存在：运行异常（在编译时检测不到异常问题，通常是在程序运行时才发现的问题）

            System.out.println("没有发生异常时，要执行的代码.....");

        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("发生异常了，已经处理，程序可以继续向下运行...");
            //e.printStackTrace();
        }

        System.out.println(arr[10]);
        System.out.println(arr[10]);
        System.out.println(arr[10]);
        System.out.println(arr[10]);



        System.out.println("程序运行。。。。");
    }
}